package types // Package types import "xemo.top/docker/docker/api/types"

// Plugin A plugin for the Engine API
type Plugin struct {
	// config
	// Required: true
	Config PluginConfig `json:"Config"`
	// 如果插件正在运行，则为True。如果插件未运行，仅安装，则为False。
	// True if the plugin is running. False if the plugin is not running,only installed.
	// Required: true
	Enabled bool `json:"Enabled"`
	// Id
	ID string `json:"Id,omitempty"`
	// name
	// Required: true
	Name string `json:"Name"`
	// plugin remote reference used to push/pull the plugin
	PluginReference string `json:"PluginReference,omitempty"`
	// settings
	// Required: true
	Settings PluginSettings `json:"Settings"`
}

// PluginSettings Settings that can be modified by users
type PluginSettings struct {
	// args
	// Required: true
	Args []string `json:"Args"`
	// devices
	// Required: true
	Devices []PluginDevice `json:"Devices"`
	// env
	// Required: true
	Env []string `json:"Env"`
	// mounts
	// Required: true
	Mounts []PluginMount `json:"Mounts"`
}

// PluginConfig The config of a plugin
type PluginConfig struct {
	// args
	// Required: true
	Args PluginConfigArgs `json:"Args"`
	// description
	// Required: true
	Description string `json:"Description"`
	// Docker version used to create the plugin
	DockerVersion string `json:"DockerVersion,omitempty"`
	// documentation
	// Required: true
	Documentation string `json:"Documentation"`
	// entrypoint
	// Required: true
	Entrypoint []string `json:"Entrypoint"`
	// env
	// Required: true
	Env []PluginEnv `json:"Env"`
	// interface
	// Required: true
	Interface PluginConfigInterface `json:"Interface"`
	// ipc host
	// Required: true
	IpcHost bool `json:"IpcHost"`
	// linux
	// Required: true
	Linux PluginConfigLinux `json:"Linux"`
	// mounts
	// Required: true
	Mounts []PluginMount `json:"Mounts"`
	// network
	// Required: true
	Network PluginConfigNetwork `json:"Network"`
	// pid host
	// Required: true
	PidHost bool `json:"PidHost"`
	// propagated mount
	// Required: true
	PropagatedMount string `json:"PropagatedMount"`
	// user
	User PluginConfigUser `json:"User,omitempty"`
	// work dir
	// Required: true
	WorkDir string `json:"WorkDir"`
	// rootfs
	Rootfs *PluginConfigRootfs `json:"root,omitempty"`
}

// PluginConfigRootfs plugin config rootfs
type PluginConfigRootfs struct {
	// diff ids
	DiffIds []string `json:"diff_ids"`
	// type
	Type string `json:"type,omitempty"`
}

// PluginConfigUser plugin config user
type PluginConfigUser struct {
	// g ID
	GID uint32 `json:"GID,omitempty"`
	// UID
	UID uint32 `json:"UID,omitempty"`
}

// PluginConfigNetwork plugin config network
type PluginConfigNetwork struct {
	// type
	// Required: true
	Type string `json"Type"`
}

// PluginConfigLinux plugin config linux
type PluginConfigLinux struct {
	// allow all devices
	// Required: true
	AllowAllDevices bool `json:"AllowAllDevices"`
	// capabilities
	// Required: true
	Capabilities []string `json:"Capabilities"`
	// devices
	// Required: true
	Devices []PluginDevice `json:"Devices"`
}

// PluginConfigInterface The interface between Docker and the plugin
type PluginConfigInterface struct {
	// Protocol to use for clients connecting to the plugin.
	ProtocolScheme string `json:"ProtocolScheme,omitempty"`
	// socket
	// Required: true
	Socket string `json:"Socket"`
	// types
	// Required: true
	Types []PluginInterfaceType `json:"Types"`
}

// PluginConfigArgs plugin config args
type PluginConfigArgs struct {
	// description
	// Required: true
	Description string `json:"Description"`
	// name
	// Required: true
	Name string `json:"Name"`
	// settable
	// Required: true
	Settable []string `json:"Settable"`
	// value
	// Required: true
	Value []string `json:"Value"`
}
